﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.IO;
using DO = DataObjects;
using DM = DataMapping;

namespace DataAccess
{
    public class ComissaoDB
    {

        #region Metodos Publicos

        public static DO.Comissao GetItem(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Comissao comissao = (from c in dc.Comissaos
                                        where c.IdComissao == id
                                        select c).FirstOrDefault();

                return FillRecord(comissao);
            }
        }

        public static List<DO.Comissao> GetList()
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                List<DM.Comissao> comissaoList = (from c in dc.Comissaos
                                                  select c).ToList();

                List<DO.Comissao> comissaoListReturn = new List<DO.Comissao>();
                foreach (DM.Comissao c in comissaoList)
                    comissaoListReturn.Add(FillRecord(c));

                return comissaoListReturn;
            }
        }

        public static int Save(DO.Comissao comissao)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Comissao comissaoDB = (from c in dc.Comissaos
                                          where c.IdComissao == comissao.Id
                                          select c).FirstOrDefault();

                if (comissaoDB == null)
                {
                    comissaoDB = new DM.Comissao();

                    comissaoDB.IdCorretor = comissao.IdCorretor;
                    comissaoDB.ValorFixo = comissao.VlrFixo;
                    comissaoDB.ValorAberto = comissao.VlrAberto;
                    comissaoDB.PercentualFixo = comissao.PercentualFixo;
                    comissaoDB.PercentualAberto = comissao.PercentualAberto;

                    dc.Comissaos.InsertOnSubmit(comissaoDB);
                }
                else
                {
                    comissaoDB.IdComissao = comissao.Id;
                    comissaoDB.IdCorretor = comissao.IdCorretor;
                    comissaoDB.ValorFixo = comissao.VlrFixo;
                    comissaoDB.ValorAberto = comissao.VlrAberto;
                    comissaoDB.PercentualFixo = comissao.PercentualFixo;
                    comissaoDB.PercentualAberto = comissao.PercentualAberto;
                }

                try
                {
                    dc.SubmitChanges();
                    return comissaoDB.IdComissao;
                }
                catch (Exception ex)
                {
                    string date = ((DateTime.Now).ToString()).Substring(0, 9);
                    date = date.Replace('/', '-');
                    string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                    string path = (String.Format("{0}{1}\\Problema Gravação_{2}.txt", @"", location, date));
                    StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                    valor.WriteLine("Erro ao salvar: " + comissaoDB.IdComissao);
                    valor.WriteLine(ex.Message);
                    valor.WriteLine("------------------------------------------------------");
                    valor.Close();

                    dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                    dc.SubmitChanges();

                    return -1;
                }
            }
        }

        public static bool Delete(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Comissao comissaoDB = (from c in dc.Comissaos
                                          where c.IdComissao == id
                                          select c).FirstOrDefault();

                if (comissaoDB != null)
                {
                    try
                    {
                        dc.Comissaos.DeleteOnSubmit(comissaoDB);
                        dc.SubmitChanges();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        string date = ((DateTime.Now).ToString()).Substring(0, 9);
                        date = date.Replace('/', '-');
                        string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                        string path = (String.Format("{0}{1}\\Problema Exclusão_{2}.txt", @"", location, date));
                        StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                        valor.WriteLine("Erro ao excluir:" + comissaoDB.IdComissao);
                        valor.WriteLine(ex.Message);
                        valor.WriteLine("------------------------------------------------------");
                        valor.Close();

                        dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                        dc.SubmitChanges();

                        return true;
                    }
                }
                else
                    return false;
            }
        }

        #endregion

        #region Metodos Privados

        private static DO.Comissao FillRecord(DM.Comissao comissaoDB)
        {
            DO.Comissao comissao = new DO.Comissao();

            comissao.Id = comissaoDB.IdComissao;
            comissao.VlrFixo = comissaoDB.ValorFixo;
            comissao.VlrAberto = comissaoDB.ValorAberto;
            comissao.PercentualFixo = comissaoDB.PercentualFixo;
            comissao.PercentualAberto = comissaoDB.PercentualAberto;
            comissao.IdCorretor = comissaoDB.IdCorretor;

            return comissao;
        }

        #endregion

    }
}
